#!/bin/bash
# 设置环境
export DISPLAY=:0
export XAUTHORITY=/home/pi/.Xauthority
# 定义项目文件夹的全路径
PROJECT_DIR=/opt/collection-dev-bin
echo "项目文件夹定义为: $PROJECT_DIR"

# 定义一个函数来重试命令
retry_command() {
  local cmd="$1"
  local max_attempts=3
  local attempt=1

  while [ $attempt -le $max_attempts ]; do
    echo "执行命令: $cmd (尝试第 $attempt 次)..."
    eval "$cmd"
    if [ $? -eq 0 ]; then
      echo "命令成功执行。"
      return 0
    fi

    echo "命令失败，尝试恢复操作并重试..."
    git fetch --all --prune   # 清理无效引用
    git gc --aggressive       # 执行垃圾回收
    git fsck --full           # 检查仓库完整性
    git checkout -f           # 强制检出文件以消除工作区中的潜在冲突

    attempt=$((attempt + 1))
    sleep 2                   # 等待几秒后重试
  done

  echo "命令在 $max_attempts 次尝试后失败。"
  return 1
}

# 检查git是否安装
for cmd in git ; do
  which $cmd > /dev/null 2>&1
  if [ $? -ne 0 ]; then
    echo "未找到命令 '$cmd'，跳过剩余步骤。"
    exit 1
  else
    echo "命令 '$cmd' 已安装。"
  fi
done

# 检测网络连接
echo "检查网络连接..."
curl -s https://baidu.com > /dev/null 2>&1
if [ $? -eq 0 ]; then
  echo "网络连接正常。"
  
  # 检查项目文件夹是否存在
  if [ ! -d "$PROJECT_DIR" ]; then
    # 首次克隆项目
    echo "未找到项目文件夹，首次克隆项目文件..."
    /bin/git clone --depth 1 https://gitee.com/yuweiqi157/collection-dev-bin.git $PROJECT_DIR
    if [ $? -ne 0 ]; then
      echo "克隆项目失败。"
      exit 1
    fi
    chmod +x $PROJECT_DIR/bin/collectionDevGui 
    chmod +x $PROJECT_DIR/collectionDevEnv.sh
  else
    # 进入项目文件夹
    cd $PROJECT_DIR
    echo "进入项目文件夹: $PROJECT_DIR"

#    # 有网络连接，更新项目文件
#    echo "更新项目文件..."
#    /bin/git fetch origin -v
#    if [ $? -ne 0 ]; then
#      echo "git fetch 失败。"
#      exit 1
#    fi
#    /bin/git reset --hard origin/master
#    if [ $? -ne 0 ]; then
#      echo "git reset 失败。"
#      exit 1
#    fi

    # 更新项目文件
    echo "更新项目文件..."

    # 尝试 git fetch
    retry_command "/bin/git fetch origin -v"
    fetch_result=$?

    if [ $fetch_result -ne 0 ]; then
      echo "git fetch 失败。"
      # 此处选择不退出，而是继续执行下一步
        cd ..
        echo "重试3次后仍失败，删除项目文件夹并重新克隆项目..."
        rm -rf $PROJECT_DIR
        # 首次克隆项目
        echo "未找到项目文件夹，首次克隆项目文件..."
        /bin/git clone --depth 1 https://gitee.com/yuweiqi157/collection-dev-bin.git $PROJECT_DIR
        chmod +x $PROJECT_DIR/bin/collectionDevGui 
        chmod +x $PROJECT_DIR/collectionDevEnv.sh
        # 进入项目文件夹
        cd $PROJECT_DIR
    else
        # 如果 git fetch 成功，尝试 git reset
        if [ $fetch_result -eq 0 ]; then
            retry_command "/bin/git reset --hard origin/master"
            reset_result=$?

            if [ $reset_result -ne 0 ]; then
                echo "git reset 失败。使用当前版本启动..."
                # 此处选择不退出，可以继续进行其他操作
            else
                echo "项目文件更新完成。使用新版本启动..."
                chmod +x $PROJECT_DIR/bin/collectionDevGui
                chmod +x $PROJECT_DIR/collectionDevEnv.sh
            fi
        fi
    fi
  fi 

else
  echo "无法连接到网络。"
  
  # 检查项目文件夹是否存在
  if [ ! -d "$PROJECT_DIR" ]; then
    echo "未找到项目文件夹,退出..."
    exit 1
  else
    # 无网络连接，不更新项目文件
    echo "无网络连接，使用当前版本启动..."
  fi
fi

# 进入项目目录
echo "进入项目目录: $PROJECT_DIR"
cd $PROJECT_DIR

# 运行collectionDevEnv.sh脚本初始化环境
echo "尝试运行collectionDevEnv.sh 脚本..."
if [ -f "./collectionDevEnv.sh" ]; then
  bash ./collectionDevEnv.sh
  if [ $? -ne 0 ]; then
    echo "collectionDevEnv.sh 脚本执行失败。"
    exit 1
  fi
else
  echo "未找到 collectionDevEnv.sh，跳过剩余步骤。"
fi

 # 运行 lora_pkt_fwd
 #echo "运行 lora_pkt_fwd..."
 #./lora_pkt_fwd -c localhost_conf.json.sx1250.CN470 > /tmp/lora.log 2>&1 &
 #if [ $? -ne 0 ]; then
 #  echo "lora_pkt_fwd 执行失败。"
 #  exit 1
 #fi

# 进入项目的 bin 目录
echo "进入 bin 目录..."
cd bin

# 运行项目
echo "设置 LD_LIBRARY_PATH 并运行项目..."
export LD_LIBRARY_PATH=~/collection-dev-bin/
./collectionDevGui


#killall lora_pkt_fwd
if [ $? -ne 0 ]; then
  echo "运行项目失败。"
  exit 1
fi

# 脚本执行成功
echo "脚本执行成功。"
exit 0
